#!/bin/bash
jar="nb888-0.0.1-SNAPSHOT"
# jar所在目录
base_dir="/root/jars/${jar}"
start_log_file="${base_dir}/start-log.log"
# 可能由于SSH会话中的环境变量问题找不到java,所以用绝对路径执行
java_bin="/usr/local/java/jdk1.8.0_231/jre/bin"
is_running() {
  pgrep -f "${jar}.jar" > /dev/null
  # 找到了返回0，找不到返回1
  return $?
}
if is_running; then
  echo "$(date '+%Y-%m-%d %H:%M:%S') 正在杀死${jar}.jar进程..." >> "${start_log_file}"
  # 杀死hello.jar进程
  pkill -f "${jar}.jar"
  # 等待进程终止
  stop_timeout_seconds=30
  stop_time=$(date +%s)
  stop_end_time=$((stop_time + stop_timeout_seconds))
  while is_running; do
    stop_current_time=$(date +%s)
    if [ "$stop_current_time" -gt "$stop_end_time" ]; then
        echo "$(date '+%Y-%m-%d %H:%M:%S') 无法杀死 $jar 进程。超过 $stop_timeout_seconds 秒。"
        exit 1
    fi
    sleep 1
  done
  echo "$(date '+%Y-%m-%d %H:%M:%S') 已杀死${jar}.jar进程." >> "${start_log_file}"
fi

# 启动jar
echo "$(date '+%Y-%m-%d %H:%M:%S') 正在启动${jar}.jar..." >> "${start_log_file}"
nohup ${java_bin}/java -Xms128m -Xmx128m -Xmn64m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${base_dir}/dump.bin -jar ${base_dir}/target/${jar}.jar > ${base_dir}/log.out 2>&1 &
# 等待直到jar启动成功
start_timeout_seconds=60
start_time=$(date +%s)
start_end_time=$((start_time + start_timeout_seconds))
while ! is_running; do
  start_current_time=$(date +%s)
  if [ "$start_current_time" -gt "$start_end_time" ]; then
     echo "$(date '+%Y-%m-%d %H:%M:%S') 启动 $jar 进程超时。超时时间 $start_timeout_seconds 秒。"
     exit 1
  fi
  sleep 1
done
echo "$(date '+%Y-%m-%d %H:%M:%S') ${jar}.jar已成功启动." >> "${start_log_file}"
# 脚本结束
exit 0
